home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / foo2qpdl-wrapper < prev    next >
Text File  |  2009-10-19  |  18KB  |  709 lines

  1. #!/bin/sh
  2.  
  3. #* Copyright (C) 2003-2006  Rick Richardson
  4. #*
  5. #* This program is free software; you can redistribute it and/or modify
  6. #* it under the terms of the GNU General Public License as published by
  7. #* the Free Software Foundation; either version 2 of the License, or
  8. #* (at your option) any later version.
  9. #*
  10. #* This program is distributed in the hope that it will be useful,
  11. #* but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. #* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. #* GNU General Public License for more details.
  14. #*
  15. #* You should have received a copy of the GNU General Public License
  16. #* along with this program; if not, write to the Free Software
  17. #* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. #*
  19. #* Authors: Rick Richardson <rick.richardson@comcast.net>
  20.  
  21. VERSION='$Id: foo2qpdl-wrapper.in,v 1.40 2009/05/30 09:42:55 rick Exp $'
  22.  
  23. #
  24. # Printer Notes:
  25. #
  26. # Samsung CLP-300: -z0, ICM
  27. # Samsung CLP-310: -z2, ICM
  28. # Samsung CLP-315: -z2, ICM
  29. # Samsung CLP-600: -z1, CRD, need ICM for black text
  30. # Samsung CLP-610: -z2, CRD, need ICM for black text
  31. # Samsung CLX-2160: -z0, ICM
  32. # Samsung CLX-3160: -z0, ICM
  33. # Samsung CLX-3175: -z2, ICM
  34. # Xerox Phaser 6110: -z0, ICM
  35. # Xerox Phaser 6110MFP: -z0, ICM
  36. #
  37.  
  38. PROGNAME="$0"
  39. BASENAME=`basename $PROGNAME`
  40. PREFIX=/usr
  41. SHARE=$PREFIX/share/foo2qpdl
  42. PATH=$PATH:/sw/bin:/opt/local/bin
  43.  
  44. #
  45. #    Log the command line, for debugging and problem reports
  46. #
  47. if [ -x /usr/bin/logger -o -x /bin/logger ]; then
  48.     logger -t "$BASENAME" -p lpr.info -- "$BASENAME $@" </dev/null
  49. fi
  50.  
  51. usage() {
  52.     cat <<EOF
  53. Usage:
  54.     $BASENAME [options] [ps-file]
  55.  
  56.     Foomatic printer wrapper for the foo2qpdl printer driver.
  57.     This script reads a Postscript ps-file or standard input
  58.     and converts it to a Samsung QPDL stream (CLP-600).
  59.  
  60. Normal Options:
  61. -c                Print in color (else monochrome)
  62. -C colormode      Colormode [$COLORMODE]
  63.                     1=CRD
  64.                     10=ICM color profile (using -G *.icm file)
  65. -d duplex         Duplex code to send to printer [$DUPLEX]
  66.                     1=off, 2=longedge, 3=shortedge
  67. -m media          Media code to send to printer [$MEDIA]
  68.                     0=plain, 1=thick, 2=thin. 3=bond, 4=color, 5=card,
  69.                     6=labels, 7=envelope, 8=preprinted, 9=cotton,
  70.                     10=recycled, 11=transparency, 12=archive
  71. -p paper          Paper code [$PAPER]
  72.                     0=letter, 1=legal, A4=2, 3=executive, 6=env#10,
  73.                     7=envMonarch, 8=envC5, 9=envDL, 11=B5jis, 12=B5iso,
  74.                     16=A5, 17=A6, 23=envC6, 24=folio, 25=env6.75, 26=env#9,
  75.                     28=oficio
  76. -n copies         Number of copies [$COPIES]
  77. -r <xres>x<yres>  Set device resolution in pixels/inch [$RES]
  78. -s source         Source code to send to printer [$SOURCE]
  79.                     1=upper, 2=lower, 4=manual, 7=auto
  80.             Code numbers may vary with printer model.
  81. -t                Draft mode.  Every other pixel is white.
  82. -2/-3/-4/-6/-8/-10/-12/-14/-15/-16/-18
  83.                   Print with N-up (requires psutils)
  84. -o orient         For N-up: -op is portrait, -ol is landscape, -os is seascape.
  85.  
  86. Printer Tweaking Options:
  87. -u <xoff>x<yoff>  Set offset of upper left printable in pixels [varies]
  88. -l <xoff>x<yoff>  Set offset of lower right printable in pixels [varies]
  89. -L mask           Send logical clipping values from -u/-l in ZjStream [3]
  90.                   0=no, 1=Y, 2=X, 3=XY
  91. -P                Do not output START_PLANE codes.  May be needed by some
  92.                   monochrome-only printers.
  93. -X padlen         Add extra zero padding to the end of BID segments [16]
  94. -z model          Printer Model [$MODEL]
  95.                          0=CLP-300, CLX-2160, CLX-3160
  96.                          1=CLP-600
  97.                          2=CLP-310, CLP-315, CLP-610, CLX-3175
  98.  
  99. Color Tweaking Options:
  100. -g gsopts         Additional options to pass to Ghostscript, such as
  101.                   -dDITHERPPI=nnn, etc.  May appear more than once. []
  102. -G profile.icm    Convert profile.icm to a Postscript CRD using icc2ps and
  103.                   adjust colors using the setcolorrendering PS operator.
  104.                   $SHARE/icm/ will be searched for profile.icm.
  105. -I intent         Select profile intent from ICM file [$INTENT]
  106.                   0=Perceptual, 1=Colorimetric, 2=Saturation, 3=Absolute
  107. -G gamma-file.ps  Prepend gamma-file to the Postscript input to perform
  108.                   color correction using the setcolortransfer PS operator.
  109.  
  110. Debugging Options:
  111. -S plane          Output just a single color plane from a color print [all]
  112.                   1=Cyan, 2=Magenta, 3=Yellow, 4=Black
  113. -D lvl            Set Debug level [$DEBUG]
  114. -V                $VERSION
  115. EOF
  116.  
  117.     exit 1
  118. }
  119.  
  120. #
  121. #       Report an error and exit
  122. #
  123. error() {
  124.     echo "$BASENAME: $1" >&2
  125.     exit 1
  126. }
  127.  
  128. dbgcmd() {
  129.     if [ $DEBUG -ge 1 ]; then
  130.         echo "$@" >&2
  131.     fi
  132.     "$@"
  133. }
  134.  
  135. #
  136. #    N-up-ify the job.  Requires psnup from psutils package
  137. #
  138. nup() {
  139.     case "$NUP" in
  140.     [2368]|1[0458])
  141.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.3in -p$paper -q
  142.     ;;
  143.     [49]|1[26])
  144.     tr '\r' '\n' | psnup $NUP_ORIENT -d2 -$NUP -m.5in -p$paper -q
  145.     ;;
  146.     *)
  147.     error "Illegal call to nup()."
  148.     ;;
  149.     esac
  150. }
  151.  
  152. #
  153. #       Process the options
  154. #
  155.  
  156. # Try to use a local copy of GhostScript 8.54, if available.  Otherwise,
  157. # fallback to whatever the Linux distro has installed (usually 7.07)
  158. #
  159. # N.B. := operator used here, when :- would be better, because "ash"
  160. # doesn't have :-
  161. if gs.foo -v >/dev/null 2>&1; then
  162.         GSBIN=${GSBIN:-gs.foo}
  163. else
  164.         GSBIN=${GSBIN:-gs}
  165. fi
  166.  
  167. CMDLINE="$*"
  168. DEBUG=0
  169. DUPLEX=1
  170. COLOR=
  171. COLORMODE=default
  172. MODEL=0
  173. QUALITY=1
  174. QUALITY=wts
  175. MEDIA=0
  176. COPIES=1
  177. test -r /etc/papersize && PAPER=$(cat /etc/papersize)
  178. test "$PAPER" || PAPER=0
  179. RES=1200x600
  180. SOURCE=1
  181. NUP=
  182. CLIP_UL=
  183. CLIP_LR=
  184. CLIP_LOG=
  185. BC=
  186. AIB=
  187. NOPLANES=
  188. COLOR2MONO=
  189. GAMMAFILE=default
  190. INTENT=0
  191. GSOPTS=
  192. EXTRAPAD=
  193. SAVETONER=
  194. NUP_ORIENT=
  195. GSDEV=-sDEVICE=pbmraw
  196. # What mode to use if the user wants us to pick the "best" mode
  197. case `$GSBIN --version` in
  198. 7*)    DEFAULTCOLORMODE=10
  199.     DEFAULTCOLORMODE=1
  200.     ;;
  201. 8.1*)
  202.     DEFAULTCOLORMODE=1
  203.     QUALITY=1
  204.     ;;
  205. *)    DEFAULTCOLORMODE=1
  206.     ;;
  207. esac
  208. while getopts "1:23456789o:b:cC:d:g:l:u:L:m:n:p:q:r:s:tz:ABS:D:G:I:PX:Vh?" opt
  209. do
  210.     case $opt in
  211.     b)    GSBIN="$OPTARG";;
  212.     c)    COLOR=-c;;
  213.     d)    DUPLEX="$OPTARG";;
  214.     g)    GSOPTS="$GSOPTS $OPTARG";;
  215.     m)    MEDIA="$OPTARG";;
  216.     n)    COPIES="$OPTARG";;
  217.     p)    PAPER="$OPTARG";;
  218.     q)    QUALITY="$OPTARG";;
  219.     r)    RES="$OPTARG";;
  220.     s)    SOURCE="$OPTARG";;
  221.     t)    SAVETONER="-t";;
  222.     z)    MODEL="$OPTARG";;
  223.     l)    CLIP_LR="-l $OPTARG";;
  224.     u)    CLIP_UL="-u $OPTARG";;
  225.     L)    CLIP_LOG="-L $OPTARG";;
  226.     A)    AIB=-A;;
  227.     B)    BC=-B;;
  228.     C)    COLORMODE="$OPTARG";;
  229.     S)    COLOR2MONO="-S$OPTARG";;
  230.     D)    DEBUG="$OPTARG";;
  231.     G)    GAMMAFILE="$OPTARG";;
  232.     I)    INTENT="$OPTARG";;
  233.     P)    NOPLANES=-P;;
  234.     X)    EXTRAPAD="-X $OPTARG";;
  235.     [234689])    NUP="$opt";;
  236.     [57])    error "Can't find acceptable layout for $opt-up";;
  237.     1)    case "$OPTARG" in
  238.         [024568])    NUP="1$OPTARG";;
  239.         *)    error "Can't find acceptable layout for 1$OPTARG-up";;
  240.         esac
  241.         ;;
  242.     o)    case "$OPTARG" in
  243.         l*)    NUP_ORIENT=-l;;
  244.         s*)    NUP_ORIENT=-r;;
  245.         p*|*)    NUP_ORIENT=;;
  246.         esac;;
  247.     V)    echo "$VERSION"; foo2qpdl -V; foo2zjs-pstops -V; exit 0;;
  248.     h|\?)
  249.         if [ "$CMDLINE" != "-?" -a "$CMDLINE" != -h ]; then
  250.             echo "Illegal command:"
  251.             echo "    $0 $CMDLINE"
  252.             echo
  253.         fi
  254.         usage;;
  255.     esac
  256. done
  257. shift `expr $OPTIND - 1`
  258.  
  259. #
  260. # If there is an argument left, take it as the file to print.
  261. # Else, the input comes from stdin.
  262. #
  263. if [ $# -ge 1 ]; then
  264.     if [ "$LPJOB" = "" ]; then
  265.     : # LPJOB="$1"
  266.     fi
  267.     exec < $1
  268. fi
  269.  
  270. #
  271. case "$QUALITY" in
  272. 0)
  273.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  274.     ;;
  275. 1)
  276.     GSOPTS="-dCOLORSCREEN $GSOPTS"
  277.     ;;
  278. 2)
  279.     GSOPTS="-dMaxBitmap=500000000 $GSOPTS"
  280.     ;;
  281. wts)
  282.     GSOPTS="-dCOLORSCREEN -dMaxBitmap=500000000 $GSOPTS"
  283.     ;;
  284. esac
  285.  
  286. #
  287. #    Validate model code
  288. #
  289. case "$MODEL" in
  290. 0|1|2)    ;;
  291. *)    error "Unknown model code $MODEL";;
  292. esac
  293.  
  294. #
  295. #    Validate media code
  296. #
  297. case "$MEDIA" in
  298. 0|plain)    MEDIA=0;;
  299. 1|thick)    MEDIA=1;;
  300. 2|thin)        MEDIA=2;;
  301. 3|bond)        MEDIA=3;;
  302. 4|color)    MEDIA=4;;
  303. 5|card)        MEDIA=5;;
  304. 6|labels)    MEDIA=6;;
  305. 7|envelope)    MEDIA=7;;
  306. 8|preprinted)    MEDIA=8;;
  307. 9|cotton)    MEDIA=9;;
  308. 10|recycled)    MEDIA=10;;
  309. [0-9]*)        ;;
  310. *)        error "Unknown media code $MEDIA";;
  311. esac
  312.  
  313. #
  314. #    Validate source (InputSlot) code
  315. #
  316. case "$SOURCE" in
  317. 1|auto)        SOURCE=1;;
  318. 2|manual)    SOURCE=2;;
  319. 3|multi)    SOURCE=3;;
  320. 4|tray1)    SOURCE=4;;
  321. [0-9]*)        ;;
  322. *)        error "Unknown source code $SOURCE";;
  323. esac
  324.  
  325. #
  326. #    Validate Duplex code
  327. #
  328. case "$DUPLEX" in
  329. 1|off|none)    DUPLEX=1;;
  330. 2|long*)    DUPLEX=2;;
  331. 3|short*)    DUPLEX=3;;
  332. [0-9]*)        ;;
  333. *)        error "Unknown duplex code $DUPLEX";;
  334. esac
  335.  
  336. #
  337. #    Validate Resolution
  338. #
  339. case "$RES" in
  340. 600x600)    ;;
  341. 1200x600)    ;;
  342. 1200x1200)    ;;
  343. *)        error "Illegal resolution $RES";;
  344. esac
  345.  
  346. #
  347. #    Figure out the paper dimensions in pixels/inch, and set the
  348. #    default clipping region.  Unfortunately, this is a trouble
  349. #    area for ZjStream printers.  Various versions of ZjS print
  350. #    engines react differently when asked to print into their
  351. #    unprintable regions.
  352. #
  353. set_clipping() {
  354.     ulx=$1; uly=$2
  355.     lrx=$3; lry=$4
  356.  
  357.     # Set clipping region if it isn't already set
  358.     if [ "$CLIP_UL" = "" ]; then
  359.     case "$RES" in
  360.     600x600)    ulx=`expr $ulx / 2`;;
  361.     2400x600)    ulx=`expr $ulx \* 2`;;
  362.     esac
  363.     CLIP_UL="-u ${ulx}x${uly}"
  364.     fi
  365.     if [ "$CLIP_LR" = "" ]; then
  366.     case "$RES" in
  367.     600x600)    lrx=`expr $lrx / 2`;;
  368.     2400x600)    lrx=`expr $lrx \* 2`;;
  369.     esac
  370.     CLIP_LR="-l ${lrx}x${lry}"
  371.     fi
  372. }
  373.  
  374. case "$PAPER" in
  375. Custom*)
  376.         case "$PAPER" in
  377.         Custom\.[0-9]*\x[0-9]*)
  378.             XDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/x.*//'`
  379.             YDIM=`echo "$PAPER" | sed -e 's/Custom\.//' -e 's/.*x//'`
  380.             ;;
  381.         *)
  382.         #%%BeginFeature: *CustomPageSize True
  383.         #216
  384.         #360
  385.         #0
  386.         #0
  387.         #0
  388.         #pop pop pop pop pop
  389.  
  390.         #%%BeginFeature: *CustomPageSize True
  391.         #792.000000 612.000000 1 0.000000 0.000000
  392.         #pop pop pop pop pop
  393.  
  394.         if [ $DEBUG = 0 ]; then
  395.             TMPFILE=/tmp/cus$$
  396.         else
  397.             TMPFILE=/tmp/custom.ps
  398.         fi
  399.         cat >$TMPFILE
  400.         exec <$TMPFILE
  401.  
  402.         tmp=`head -n 10000 $TMPFILE \
  403.             | sed -n '/CustomPageSize/{n;p;n;p;}' \
  404.             | tr '\n' ' '`
  405.         case "$tmp" in
  406.         [0-9]*\ [0-9]*)
  407.             XDIM=`echo "$tmp" | sed 's/ .*//'`
  408.             YDIM=`echo "$tmp" | sed -e 's/^[^ ]* //' -e 's/ .*//'`
  409.             ;;
  410.         *)
  411.             if [ $DEBUG = 0 ]; then rm -f $TMPFILE; fi
  412.             error "Custom page size [XY]DIM != 1-99999"
  413.             ;;
  414.         esac
  415.         ;;
  416.         esac
  417.         XDIM=`dc -e "$XDIM 1200* 72/p"`
  418.         YDIM=`dc -e "$YDIM 600* 72/p"`
  419.         PAPER=21;        paper=letter;
  420.         # Doesn't work on a real printer - smudges.
  421.                 # set_clipping 2 100     2 100
  422.         set_clipping 150 100    150 100
  423.         ;;
  424. 0|letter)    PAPER=0;    paper=letter;    XDIM="10200"; YDIM="6600"
  425.         set_clipping 150 100    150 100
  426.         ;;
  427. 1|legal)    PAPER=1;    paper=legal;     XDIM="10200"; YDIM="8400"
  428.         set_clipping 150 100    150 100
  429.         ;;
  430. 3|executive)    PAPER=3;    paper=executive; XDIM="8700";  YDIM="6300"
  431.         set_clipping 150 100    150 100
  432.         ;;
  433. 2|a4|A4)    PAPER=2;    paper=a4;        XDIM="9920";  YDIM="7016"
  434.         set_clipping 150 100    150 100
  435.         ;;
  436. 16|a5|A5)    PAPER=16;    paper=a5;        XDIM="6992";  YDIM="4960"
  437.         set_clipping 150 100    150 100
  438.         ;;
  439. 11|b5jis|B5jis)    PAPER=11;    paper=b5;        XDIM="8598";  YDIM="6070"
  440.         set_clipping 150 100    150 100
  441.         ;;
  442. 24|folio)    PAPER=24;    paper=folio;     XDIM="9922"; YDIM="7796"
  443.         set_clipping 150 100    150 100
  444.         ;;
  445. 26|"env#9")    PAPER=26;    paper=env9;      XDIM="4496";  YDIM="5324"
  446.         set_clipping 150 100    150 100
  447.         ;;
  448. 6|"env#10")    PAPER=6;    paper=env10;     XDIM="4950";  YDIM="5700"
  449.         set_clipping 150 100    150 100
  450.         ;;
  451. 9|envDL)    PAPER=9;    paper=envDL;     XDIM="5200";  YDIM="5200"
  452.         set_clipping 150 100    150 100
  453.         ;;
  454. 8|envC5)    PAPER=8;    paper=envC5;     XDIM="7650";  YDIM="5408"
  455.         set_clipping 150 100    150 100
  456.         ;;
  457. 23|envC6)    PAPER=23;    paper=envC6;     XDIM="5386";  YDIM="3826"
  458.         set_clipping 150 100    150 100
  459.         ;;
  460. 12|b5iso|B5iso)    PAPER=12;    paper=b5;        XDIM="8314";  YDIM="5906"
  461.         set_clipping 150 100    150 100
  462.         ;;
  463. 7|envMonarch)    PAPER=7;    paper=envMonarch;XDIM="4650";  YDIM="4500"
  464.         set_clipping 150 100    150 100
  465.         ;;
  466. 25|env6.75)    PAPER=25;    paper=env6.75;   XDIM="4348";  YDIM="3900"
  467.         set_clipping 150 100    150 100
  468.         ;;
  469. 17|a6|A6)    PAPER=17;    paper=a6;        XDIM="4960";  YDIM="3496"
  470.         set_clipping 150 100    150 100
  471.         ;;
  472. 28|oficio)    PAPER=28;    paper=a6;        XDIM="10200"; YDIM="8100"
  473.         set_clipping 150 100    150 100
  474.         ;;
  475. *)        error "Unimplemented paper code $PAPER";;
  476. esac
  477. # e.g. /usr/share/ghostscript/7.07/lib/gs_statd.ps
  478. PAPERSIZE="-sPAPERSIZE=$paper";
  479.  
  480. case "$RES" in
  481. 600x600)    XDIM=`expr $XDIM / 2`;;
  482. 1200x600)    ;;
  483. 1200x1200)    YDIM=`expr $YDIM \* 2`;;
  484. esac
  485. DIM="${XDIM}x${YDIM}"
  486.  
  487. #
  488. # Filter thru psnup if N-up printing has been requested
  489. #
  490. case $NUP in
  491. [234689]|1[024568])    PREFILTER="nup";;
  492. *)            PREFILTER=cat;;
  493. esac
  494. if [ "$DEBUG" -ge 9 ]; then
  495.     PREFILTER="tee /tmp/$BASENAME.ps"
  496. fi
  497.  
  498. #
  499. #    Overload -G.  If the file name ends with ".icm" or ".ICM"
  500. #    then convert the ICC color profile to a Postscript CRD,
  501. #    then prepend it to the users job.  Select the intent
  502. #    using the -I option.
  503. #
  504.  
  505. create_crd() {
  506.     #
  507.     # Create a Postscript CRD
  508.     #
  509.     ICC2PS=$PREFIX/bin/foo2zjs-icc2ps
  510.     if [ -x $ICC2PS ]; then
  511.     case "$GAMMAFILE" in
  512.     none | none.icm | */none.icm)
  513.         ;;
  514.     *)
  515.         if [ -x /usr/bin/logger ]; then
  516.         logger -t "$BASENAME" -p lpr.info -- \
  517.         "`basename $ICC2PS` -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps"
  518.         fi
  519.         $ICC2PS -o $GAMMAFILE -t$INTENT > $ICCTMP.crd.ps 2>$ICCTMP.log \
  520.         || error "Problem converting .ICM file to Postscript"
  521.         ;;
  522.     esac
  523.  
  524.     PSTOPS_OPTS="$PSTOPS_OPTS -c"
  525.     cat > $ICCTMP.usecie.ps <<-EOF
  526.         %!PS-Adobe-3.0
  527.         <</UseCIEColor true>>setpagedevice
  528.     EOF
  529.     if [ "$QUALITY" = wts ]; then
  530.         cat >> $ICCTMP.usecie.ps <<-EOF
  531.         << /UseWTS true >> setuserparams
  532.         <<
  533.             /AccurateScreens true
  534.             /HalftoneType 1
  535.             /HalftoneName (Round Dot Screen) cvn
  536.             /SpotFunction { 180 mul cos exch 180 mul cos add 2 div}
  537.             /Frequency 137
  538.             /Angle 37
  539.         >> sethalftone
  540.         EOF
  541.     fi
  542.     cat > $ICCTMP.selcrd.ps <<-EOF
  543.         /Current /ColorRendering findresource setcolorrendering
  544.     EOF
  545.     case "$GAMMAFILE" in
  546.     none | none.icm | */none.icm) GAMMAFILE="$ICCTMP.usecie.ps";;
  547.     *)    GAMMAFILE="$ICCTMP.usecie.ps $ICCTMP.crd.ps $ICCTMP.selcrd.ps";;
  548.     esac
  549.     else
  550.     GAMMFILE=
  551.     fi
  552. }
  553.  
  554. if [ $DEBUG -gt 0 ]; then
  555.     ICCTMP=/tmp/icc
  556. else
  557.     ICCTMP=/tmp/icc$$
  558. fi
  559.  
  560. if [ "" = "$COLOR" ]; then
  561.     COLORMODE=
  562.     GAMMAFILE=
  563. else
  564.     case "$COLORMODE" in
  565.     default)    COLORMODE=$DEFAULTCOLORMODE;;
  566.     esac
  567.     case "$GAMMAFILE" in
  568.     default)    GAMMAFILE=samclp300-0.icm;;
  569.     esac
  570. fi
  571.  
  572. CRDBASE="$PREFIX/share/foo2qpdl/crd"
  573. case "$MODEL" in
  574.     0)    model=CLP-300;;
  575.     1)    model=CLP-600;;
  576.     2)    model=CLP-600;;
  577. esac
  578. case "$RES" in
  579.     600x600)    SCREEN=$model-600x600cms2;;
  580.     1200x600)    SCREEN=$model-1200x600cms2;;
  581.     1200x1200)    SCREEN=$model-1200x1200cms2;;
  582. esac
  583.  
  584. PSTOPS_OPTS="-n"
  585.  
  586. case "$COLORMODE" in
  587. 0|"")
  588.     # Monochrome
  589.     ;;
  590. 10|icm)
  591.     # Use old ICM method
  592.     AIB=-A
  593.     BC=-B
  594.     case "$GAMMAFILE" in
  595.     none | none.icm | */none.icm)
  596.     create_crd
  597.     ;;
  598.     *.icm|*.ICM|*.icc|*.ICC)
  599.     #
  600.     # Its really an .ICM file, not a gamma file.
  601.     #
  602.     # The file can be a full path name, or the name of a file in $SHARE/icm/
  603.     #
  604.     if [ -r "$GAMMAFILE" ]; then
  605.         create_crd
  606.     elif [ -r "$SHARE/icm/$GAMMAFILE" ]; then
  607.         GAMMAFILE="$SHARE/icm/$GAMMAFILE"
  608.         create_crd
  609.     else
  610.         GAMMAFILE=
  611.     fi
  612.     ;;
  613.     esac
  614.     ;;
  615. 1|crd)
  616.     # CRD
  617.     GAMMAFILE=""
  618.     GAMMAFILE="$GAMMAFILE $CRDBASE/${model}cms"
  619.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  620.     # Black text...
  621.     TMPFILE2=/tmp/black$$
  622.     cat $CRDBASE/black-text.ps - >$TMPFILE2
  623.     exec <$TMPFILE2
  624.     ;;
  625. *.crd)
  626.     GAMMAFILE="$CRDBASE/prolog.ps"
  627.     if [ -f $COLORMODE ]; then
  628.     GAMMAFILE="$GAMMAFILE $COLORMODE"
  629.     elif [ -f $CRDBASE/$COLORMODE ]; then
  630.     GAMMAFILE="$GAMMAFILE $CRDBASE/$COLORMODE"
  631.     else
  632.     error "Can't find CRD '$COLORMODE' in . or in $CRDBASE"
  633.     fi
  634.     GAMMAFILE="$GAMMAFILE $CRDBASE/$SCREEN"
  635.     ;;
  636. *)
  637.     error "Unknown color method '$COLORMODE'"
  638.     ;;
  639. esac
  640.  
  641. if [ "$COLOR" != "" -a "$QUALITY" = wts ]; then
  642.     PSTOPS_OPTS="$PSTOPS_OPTS -w"
  643. fi
  644.  
  645. if [ "" != "$COLOR" ]; then
  646.     if [ "" = "$AIB" -a "" = "$BC" ]; then
  647.     # Faster, but can't handle AllIsBlack or BlackClears
  648.     GSDEV=-sDEVICE=pksmraw
  649.     else
  650.     # Can't handle different size pages
  651.     GSDEV=-sDEVICE=bitcmyk
  652.     fi
  653. fi
  654.  
  655. #
  656. #    Figure out USERNAME
  657. #
  658. if [ "$LPUSER" != "" ]; then
  659.     USER="$LPUSER@$LPHOST"
  660. else
  661.     USER=""
  662. fi
  663.  
  664. #
  665. #    Main Program, just cobble together the pipeline and run it
  666. #
  667. #    The malarky with file descriptors 1 and 3 is to avoid a bug in
  668. #    (some versions?) of Ghostscript where Postscript's stdout gets
  669. #    intermingled with the printer drivers output, resulting in
  670. #    corrupted image data.
  671. #
  672. GS="$GSBIN -q -dBATCH -dSAFER -dQUIET -dNOPAUSE"
  673.  
  674. foo2zjs-pstops $PSTOPS_OPTS | \
  675. $PREFILTER \
  676. | ($GS $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS \
  677.     -sOutputFile="|cat 1>&3" $GAMMAFILE -_ >/dev/null) 3>&1 \
  678. | foo2qpdl -r$RES -g$DIM -p$PAPER -m$MEDIA -n$COPIES -d$DUPLEX -s$SOURCE \
  679.         -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG $SAVETONER \
  680.         -J "$LPJOB" -U "$USER" \
  681.         $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD -D$DEBUG
  682.  
  683. #
  684. #    Log the command line, for debugging and problem reports
  685. #
  686. if [ -x /usr/bin/logger ]; then
  687.     logger -t "$BASENAME" -p lpr.info -- \
  688.     "$GSBIN $PAPERSIZE -g$DIM -r$RES $GSDEV $GSOPTS $GAMMAFILE"
  689.     logger -t "$BASENAME" -p lpr.info -- \
  690.     "foo2qpdl -r$RES -g$DIM -p$PAPER -m$MEDIA \
  691. -n$COPIES -d$DUPLEX -s$SOURCE -z$MODEL $COLOR $CLIP_UL $CLIP_LR $CLIP_LOG \
  692. $SAVETONER $BC $AIB $COLOR2MONO $NOPLANES $EXTRAPAD"
  693. fi
  694.  
  695. #
  696. #    Remove cruft
  697. #
  698. if [ $DEBUG -eq 0 ]; then
  699.     for i in crd.ps log usecie.ps selcrd.ps
  700.     do
  701.     file="$ICCTMP.$i"
  702.     [ -f $file ] && rm -f $file
  703.     done
  704.     [ -f "$TMPFILE" ] && rm -f $TMPFILE
  705.     [ -f "$TMPFILE2" ] && rm -f $TMPFILE2
  706. fi
  707.  
  708. exit 0
  709.